package nuc.ss.shopping;

import nuc.ss.shopping.entity.User;

import java.io.*;

public class TestObjectStream {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //创建一个用户
        User user = new User("u00001","赵子锐","123456","管理员",'男',"太原");
        //创建一个文件
        File f = new File("E:\\java_new\\java_code\\J2024_12_8_2\\src\\User.txt");
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        try {
            //将用户信息写入文件

            // 创建一根字节输出流 细 管道
            fos = new FileOutputStream(f,true);//以追加的方式写文件

            // 创建一根对象输出流 粗 管道
            oos = new ObjectOutputStream(fos);//注意这里接的是细管道
            //打开水龙头：相当于调用writeObject方法
            oos.writeObject(user); //这里直接传入对象user即可 不用再toString


        } catch(IOException e) {
            e.printStackTrace();
        } finally {
            if (oos != null) {
                oos.close(); //先关粗的，再关细的
            }
            if (fos != null) {
                fos.close();
            }
        }

        //从文件中读出用户信息
        //创建一根字符输入流管道 - 细管道
        FileInputStream fis = new FileInputStream(f);

        //创建一根字符输入流管道 - 粗管道
        ObjectInputStream ois = new ObjectInputStream(fis);

        //打开水龙头 // 增加了按行读写的能力
        User u = null; //要读出一个用户 而不是一个对象
        while (fis.available() > 0) { // available 返回 int 类型 后面还有的字节数
            u = (User)ois.readObject();
            //打印到控制台
            System.out.println(u);
            fis.skip(4); //指针往后四个字节 跳过AC
        }


        //关闭回收资源
        if (fis != null) {
            fis.close(); //读的时候先关细的管道
        }
        if (ois != null) {
            ois.close();
        }
    }
}

